{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# This information helps with debugging and getting support :)\n", "import sys, platform\n", "import pandas as pd\n", "import bifacial_radiance as br\n", "print(\"Working on a \", platform.system(), platform.release())\n", "print(\"Python version \", sys.version)\n", "print(\"Pandas version \", pd.__version__)\n", "print(\"bifacial_radiance version \", br.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 14 - Cement Racking Albedo Improvements\n", "\n", "This journal creates a paver underneath the single-axis trackers, and evaluates the improvement for one day -- June 17th with and without the pavers for a location in Davis, CA.\n", "\n", "![Paver](../images_wiki/AdvancedJournals/Pavers.PNG)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Measurements:\n", "![Paver](../images_wiki/AdvancedJournals/Pavers_Geometry.PNG)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your simulation will be stored in C:\\Users\\mprillim\\sam_dev\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_14\n" ] } ], "source": [ "import os\n", "from pathlib import Path\n", "import pandas as pd\n", "\n", "testfolder = str(Path().resolve().parent.parent / 'bifacial_radiance' / 'TEMP' / 'Tutorial_14')\n", "if not os.path.exists(testfolder):\n", " os.makedirs(testfolder)\n", " \n", "print (\"Your simulation will be stored in %s\" % testfolder)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from bifacial_radiance import * \n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "path = C:\\Users\\mprillim\\sam_dev\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_14\n", "Loading albedo, 1 value(s), 0.200 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_CA_Sacramento.Metro.AP.724839_TMY3.epw\n", " ... OK!\n", "8760 line in WeatherFile. Assuming this is a standard hourly WeatherFile for the year for purposes of saving Gencumulativesky temporary weather files in EPW folder.\n", "Coercing year to 2021\n", "Saving file EPWs\\metdata_temp.csv, # points: 8760\n", "Calculating Sun position for Metdata that is right-labeled with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n", "\n", "Module Name: test-module\n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n", "Module was shifted by 0.078 in X to avoid sensors on air\n", "This is a Cell-Level detailed module with Packaging Factor of 0.85 %\n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n" ] } ], "source": [ "simulationname = 'tutorial_14'\n", "\n", "#Location:\n", "lat = 38.5449 # Davis, CA\n", "lon = -121.7405 # Davis, CA\n", "# MakeModule Parameters\n", "moduletype='test-module'\n", "numpanels = 1 # AgriPV site has 3 modules along the y direction (N-S since we are facing it to the south) .\n", "x = 0.95 \n", "y = 1.838\n", "xgap = 0.02# Leaving 2 centimeters between modules on x direction\n", "ygap = 0.0 # 1 - up \n", "zgap = 0.06 # gap between modules and torquetube.\n", "\n", "# Other default values:\n", "\n", "# TorqueTube Parameters\n", "axisofrotationTorqueTube=True\n", "torqueTube = False\n", "cellLevelModule = True\n", "\n", "numcellsx = 6\n", "numcellsy = 10\n", "xcell = 0.156\n", "ycell = 0.158\n", "xcellgap = 0.015\n", "ycellgap = 0.015\n", "\n", "sensorsy = numcellsy # one sensor per cell\n", "\n", "cellLevelModuleParams = {'numcellsx': numcellsx, 'numcellsy':numcellsy, \n", " 'xcell': xcell, 'ycell': ycell, 'xcellgap': xcellgap, 'ycellgap': ycellgap}\n", "\n", "# SceneDict Parameters\n", "gcr = 0.33 # m\n", "albedo = 0.2 #'grass' # ground albedo\n", "hub_height = 1.237 # m \n", "nMods = 20 # six modules per row.\n", "nRows = 3 # 3 row\n", "\n", "azimuth_ang = 90 # Facing east \n", "\n", "\n", "demo = RadianceObj(simulationname,path = testfolder) # Create a RadianceObj 'object'\n", "demo.setGround(albedo) #\n", "epwfile = demo.getEPW(lat, lon) \n", "metdata = demo.readWeatherFile(epwfile, coerce_year=2021) # read in the EPW weather data from above\n", "mymodule=demo.makeModule(name=moduletype,x=x,y=y,numpanels = numpanels, xgap=xgap, ygap=ygap)\n", "mymodule.addCellModule(numcellsx=numcellsx, numcellsy=numcellsy,\n", " xcell=xcell, ycell=ycell, xcellgap=xcellgap, ycellgap=ycellgap)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Added material sw_chantillywhite to file ground.rad\n" ] } ], "source": [ "description = 'Sherman Williams \"Chantilly White\" acrylic paint'\n", "materialpav = 'sw_chantillywhite'\n", "Rrefl = 0.5\n", "Grefl = 0.5 \n", "Brefl = 0.5\n", "demo.addMaterial(material=materialpav, Rrefl=Rrefl, Grefl=Grefl, Brefl=Brefl, comment=description)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation without Pavers" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Created tutorial_14.oct\n" ] } ], "source": [ "timeindex = metdata.datetime.index(pd.to_datetime('2021-06-17 12:0:0 -8')) # Davis, CA is TZ -8\n", "demo.gendaylit(timeindex) \n", " \n", "tilt = demo.getSingleTimestampTrackerAngle(timeindex=timeindex, gcr=gcr, \n", " azimuth=180, axis_tilt=0, \n", " limit_angle=60, backtrack=True)\n", "# create a scene with all the variables\n", "sceneDict = {'tilt':tilt,'gcr': gcr,'hub_height':hub_height,'azimuth':azimuth_ang, 'module_type':moduletype, 'nMods': nMods, 'nRows': nRows} \n", "scene = demo.makeScene(module=mymodule, sceneDict=sceneDict) #makeScene creates a .rad file with 20 modules per row, 7 rows.\n", "octfile = demo.makeOct(demo.getfilelist()) # makeOct combines all of the ground, sky and object fil|es into a .oct file." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Linescan in process: tutorial_14_noPavers_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_Row2_Module10.csv\n", "Simulation without Pavers Finished\n" ] } ], "source": [ "analysis = AnalysisObj(octfile, demo.name) # return an analysis object including the scan dimensions for back irradiance\n", "frontscan, backscan = analysis.moduleAnalysis(scene, sensorsy=sensorsy)\n", "analysis.analysis(octfile, simulationname+\"_noPavers\", frontscan, backscan) # compare the back vs front irradiance \n", "print(\"Simulation without Pavers Finished\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Looping on the day" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_1_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_1_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_1_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_2_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_2_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_2_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_3_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_3_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_3_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_4_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_4_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_4_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_5_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_5_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_5_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_6_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_6_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_6_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_7_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_7_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_7_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_8_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_8_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_8_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_9_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_9_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_9_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_10_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_10_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_10_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_11_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_11_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_11_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_noPavers_12_Row2_Module10_Front\n", "Linescan in process: tutorial_14_noPavers_12_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_noPavers_12_Row2_Module10.csv\n" ] } ], "source": [ "j=0\n", "starttimeindex = metdata.datetime.index(pd.to_datetime('2021-06-17 7:0:0 -8'))\n", "endtimeindex = metdata.datetime.index(pd.to_datetime('2021-06-17 19:0:0 -8'))\n", "for timess in range (starttimeindex, endtimeindex):\n", " j+=1\n", " demo.gendaylit(timess)\n", " tilt = demo.getSingleTimestampTrackerAngle(metdata=metdata, timeindex=timess, gcr=gcr, \n", " azimuth=180, axis_tilt=0, \n", " limit_angle=60, backtrack=True)\n", " # create a scene with all the variables\n", " sceneDict = {'tilt':tilt,'gcr': gcr,'hub_height':hub_height,'azimuth':azimuth_ang, 'module_type':moduletype, 'nMods': nMods, 'nRows': nRows} \n", " scene = demo.makeScene(module=mymodule, sceneDict=sceneDict, append=False) #makeScene creates a .rad file with 20 modules per row, 7 rows.\n", " octfile = demo.makeOct(demo.getfilelist()) # makeOct combines all of the ground, sky and object fil|es into a .oct file\n", " frontscan, backscan = analysis.moduleAnalysis(scene, sensorsy=sensorsy)\n", " analysis.analysis(octfile, simulationname+\"_noPavers_\"+str(j), frontscan, backscan) # compare the back vs front irradiance \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation With Pavers" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Append=False in makeScene. Existing scenes being over-written. \n" ] } ], "source": [ "demo.gendaylit(timeindex)\n", "tilt = demo.getSingleTimestampTrackerAngle(metdata=metdata, timeindex=timeindex, gcr=gcr, \n", " azimuth=180, axis_tilt=0, \n", " limit_angle=60, backtrack=True)\n", "# create a scene with all the variables\n", "sceneDict = {'tilt':tilt,'gcr': gcr,'hub_height':hub_height,'azimuth':azimuth_ang, 'module_type':moduletype, 'nMods': nMods, 'nRows': nRows} \n", "scene = demo.makeScene(module=mymodule, sceneDict=sceneDict) #makeScene creates a .rad file with 20 modules per row, 7 rows." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Custom Object Name objects\\PAVER0.rad\n", "\n", "Custom Object Name objects\\PAVER1.rad\n", "\n", "Custom Object Name objects\\PAVER2.rad\n" ] } ], "source": [ "torquetubelength = demo.module.scenex*(nMods) \n", "pitch = demo.module.sceney/gcr\n", "startpitch = -pitch * (nRows-1)/2\n", "p_w = 0.947 # m\n", "p_h = 0.092 # m\n", "p_w2 = 0.187 # m\n", "p_h2 = 0.184 # m\n", "offset_w1y = -(p_w/2)+(p_w2/2)\n", "offset_w2y = (p_w/2)-(p_w2/2)\n", "\n", "customObjects = []\n", "for i in range (0, nRows): \n", " name='PAVER'+str(i)\n", " text='! genbox {} paver{} {} {} {} | xform -t {} {} 0 | xform -t {} 0 0'.format(materialpav, i, \n", " p_w, torquetubelength, p_h, \n", " -p_w/2, (-torquetubelength+demo.module.sceney)/2.0,\n", " startpitch+pitch*i)\n", " text += '\\r\\n! genbox {} paverS1{} {} {} {} | xform -t {} {} 0 | xform -t {} 0 0'.format(materialpav, i,\n", " p_w2, torquetubelength, p_h2, \n", " -p_w2/2+offset_w1y, (-torquetubelength+demo.module.sceney)/2.0,\n", " startpitch+pitch*i)\n", " text += '\\r\\n! genbox {} paverS2{} {} {} {} | xform -t {} {} 0 | xform -t {} 0 0'.format(materialpav, i,\n", " p_w2, torquetubelength, p_h2, \n", " -p_w2/2+offset_w2y, (-torquetubelength+demo.module.sceney)/2.0,\n", " startpitch+pitch*i)\n", "\n", " customObject = demo.makeCustomObject(name,text)\n", " customObjects.append(customObject)\n", " scene.appendtoScene(customObject=customObject)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Created tutorial_14.oct\n" ] }, { "data": { "text/plain": [ "'tutorial_14.oct'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "demo.makeOct()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can view the geometry generated in the terminal with:\n", "\n", "**rvu -vf views\\front.vp -e .01 -pe 0.01 -vp -5 -14 1 -vd 0 0.9946 -0.1040 tutorial_14.oct**" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "\n", "## Comment the ! line below to run rvu from the Jupyter notebook instead of your terminal.\n", "## Simulation will stop until you close the rvu window\n", "\n", "#!rvu -vf views\\front.vp -e .01 -pe 0.01 -vp -5 -14 1 -vd 0 0.9946 -0.1040 tutorial_14.oct\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Linescan in process: tutorial_14_WITHPavers_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_Row2_Module10.csv\n", "Simulation WITH Pavers Finished\n" ] } ], "source": [ "analysis = AnalysisObj(octfile, demo.name) # return an analysis object including the scan dimensions for back irradiance\n", "frontscan, backscan = analysis.moduleAnalysis(scene, sensorsy=sensorsy)\n", "analysis.analysis(octfile, simulationname+\"_WITHPavers\", frontscan, backscan) # compare the back vs front irradiance \n", "print(\"Simulation WITH Pavers Finished\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LOOP WITH PAVERS" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_1_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_1_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_1_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_2_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_2_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_2_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_3_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_3_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_3_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_4_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_4_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_4_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_5_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_5_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_5_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_6_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_6_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_6_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_7_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_7_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_7_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_8_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_8_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_8_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_9_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_9_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_9_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_10_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_10_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_10_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_11_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_11_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_11_Row2_Module10.csv\n", "Append=False in makeScene. Existing scenes being over-written. \n", "Created tutorial_14.oct\n", "Linescan in process: tutorial_14_WITHPavers_12_Row2_Module10_Front\n", "Linescan in process: tutorial_14_WITHPavers_12_Row2_Module10_Back\n", "Saved: results\\irr_tutorial_14_WITHPavers_12_Row2_Module10.csv\n" ] } ], "source": [ "j=0\n", "for timess in range (starttimeindex, endtimeindex):\n", " j+=1\n", " demo.gendaylit(timess)\n", " tilt = demo.getSingleTimestampTrackerAngle(metdata=metdata, timeindex=timess, gcr=gcr, \n", " azimuth=180, axis_tilt=0, \n", " limit_angle=60, backtrack=True)\n", " # create a scene with all the variables\n", " sceneDict = {'tilt':tilt,'gcr': gcr,'hub_height':hub_height,'azimuth':azimuth_ang, 'module_type':moduletype, 'nMods': nMods, 'nRows': nRows} \n", " scene = demo.makeScene(mymodule, sceneDict=sceneDict) #makeScene creates a .rad file with 20 modules per row, 7 rows.\n", " # Appending Pavers here\n", " scene.appendtoScene(customObject=customObjects[0])\n", " scene.appendtoScene(customObject=customObjects[1])\n", " scene.appendtoScene(customObject=customObjects[2])\n", " octfile = demo.makeOct(demo.getfilelist()) # makeOct combines all of the ground, sky and object fil|es into a .oct file\n", " frontscan, backscan = analysis.moduleAnalysis(scene, sensorsy=sensorsy)\n", " analysis.analysis(octfile, simulationname+\"_WITHPavers_\"+str(j), frontscan, backscan) # compare the back vs front irradiance \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# RESULTS ANALYSIS NOON" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "df_0 = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_noPavers_Row2_Module10.csv'))\n", "df_w = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_WITHPavers_Row2_Module10.csv')) " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
00.7730.01.1421.112a9.1.a2.0.0.cellPVmodule.6457a9.1.a2.0.0.cellPVmodule.2310945.273116.7100.1230.7690.0
10.6020.01.1681.139a9.1.a2.1.0.cellPVmodule.6457a9.1.a2.1.0.cellPVmodule.2310945.272109.0250.1150.5980.0
20.4310.01.1951.166a9.1.a2.2.0.cellPVmodule.6457a9.1.a2.2.0.cellPVmodule.2310945.271102.8380.1090.4270.0
30.2600.01.2221.192a9.1.a2.3.0.cellPVmodule.6457a9.1.a2.3.0.cellPVmodule.2310945.27099.0710.1050.2560.0
40.0890.01.2481.219a9.1.a2.4.0.cellPVmodule.6457a9.1.a2.4.0.cellPVmodule.2310945.27097.2040.1030.0850.0
5-0.0820.01.2741.245a9.1.a2.5.0.cellPVmodule.6457a9.1.a2.5.0.cellPVmodule.2310945.26995.4820.101-0.0860.0
6-0.2520.01.3021.272a9.1.a2.6.0.cellPVmodule.6457a9.1.a2.6.0.cellPVmodule.2310945.26897.0060.103-0.2570.0
7-0.4230.01.3281.299a9.1.a2.7.0.cellPVmodule.6457a9.1.a2.7.0.cellPVmodule.2310945.268102.9090.109-0.4280.0
8-0.5940.01.3551.325a9.1.a2.8.0.cellPVmodule.6457a9.1.a2.8.0.cellPVmodule.2310945.568106.9000.113-0.5990.0
9-0.7650.01.3811.352a9.1.a2.9.0.cellPVmodule.6457a9.1.a2.9.0.cellPVmodule.2310945.571112.2710.119-0.7690.0
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 0.773 0.0 1.142 1.112 a9.1.a2.0.0.cellPVmodule.6457 \n", "1 0.602 0.0 1.168 1.139 a9.1.a2.1.0.cellPVmodule.6457 \n", "2 0.431 0.0 1.195 1.166 a9.1.a2.2.0.cellPVmodule.6457 \n", "3 0.260 0.0 1.222 1.192 a9.1.a2.3.0.cellPVmodule.6457 \n", "4 0.089 0.0 1.248 1.219 a9.1.a2.4.0.cellPVmodule.6457 \n", "5 -0.082 0.0 1.274 1.245 a9.1.a2.5.0.cellPVmodule.6457 \n", "6 -0.252 0.0 1.302 1.272 a9.1.a2.6.0.cellPVmodule.6457 \n", "7 -0.423 0.0 1.328 1.299 a9.1.a2.7.0.cellPVmodule.6457 \n", "8 -0.594 0.0 1.355 1.325 a9.1.a2.8.0.cellPVmodule.6457 \n", "9 -0.765 0.0 1.381 1.352 a9.1.a2.9.0.cellPVmodule.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a9.1.a2.0.0.cellPVmodule.2310 945.273 116.710 0.123 0.769 \n", "1 a9.1.a2.1.0.cellPVmodule.2310 945.272 109.025 0.115 0.598 \n", "2 a9.1.a2.2.0.cellPVmodule.2310 945.271 102.838 0.109 0.427 \n", "3 a9.1.a2.3.0.cellPVmodule.2310 945.270 99.071 0.105 0.256 \n", "4 a9.1.a2.4.0.cellPVmodule.2310 945.270 97.204 0.103 0.085 \n", "5 a9.1.a2.5.0.cellPVmodule.2310 945.269 95.482 0.101 -0.086 \n", "6 a9.1.a2.6.0.cellPVmodule.2310 945.268 97.006 0.103 -0.257 \n", "7 a9.1.a2.7.0.cellPVmodule.2310 945.268 102.909 0.109 -0.428 \n", "8 a9.1.a2.8.0.cellPVmodule.2310 945.568 106.900 0.113 -0.599 \n", "9 a9.1.a2.9.0.cellPVmodule.2310 945.571 112.271 0.119 -0.769 \n", "\n", " rearY \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "5 0.0 \n", "6 0.0 \n", "7 0.0 \n", "8 0.0 \n", "9 0.0 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_0" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
00.7730.01.1421.112a9.1.a2.0.0.cellPVmodule.6457a9.1.a2.0.0.cellPVmodule.2310944.889125.3960.1330.7690.0
10.6020.01.1681.139a9.1.a2.1.0.cellPVmodule.6457a9.1.a2.1.0.cellPVmodule.2310944.934119.2250.1260.5980.0
20.4310.01.1951.166a9.1.a2.2.0.cellPVmodule.6457a9.1.a2.2.0.cellPVmodule.2310944.980114.0550.1210.4270.0
30.2600.01.2221.192a9.1.a2.3.0.cellPVmodule.6457a9.1.a2.3.0.cellPVmodule.2310945.024109.9550.1160.2560.0
40.0890.01.2481.219a9.1.a2.4.0.cellPVmodule.6457a9.1.a2.4.0.cellPVmodule.2310945.070108.4910.1150.0850.0
5-0.0820.01.2741.245a9.1.a2.5.0.cellPVmodule.6457a9.1.a2.5.0.cellPVmodule.2310945.510107.2110.113-0.0860.0
6-0.2520.01.3021.272a9.1.a2.6.0.cellPVmodule.6457a9.1.a2.6.0.cellPVmodule.2310945.526110.1060.116-0.2570.0
7-0.4230.01.3281.299a9.1.a2.7.0.cellPVmodule.6457a9.1.a2.7.0.cellPVmodule.2310945.542110.9430.117-0.4280.0
8-0.5940.01.3551.325a9.1.a2.8.0.cellPVmodule.6457a9.1.a2.8.0.cellPVmodule.2310945.557113.8520.120-0.5990.0
9-0.7650.01.3811.352a9.1.a2.9.0.cellPVmodule.6457a9.1.a2.9.0.cellPVmodule.2310945.573119.2700.126-0.7690.0
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 0.773 0.0 1.142 1.112 a9.1.a2.0.0.cellPVmodule.6457 \n", "1 0.602 0.0 1.168 1.139 a9.1.a2.1.0.cellPVmodule.6457 \n", "2 0.431 0.0 1.195 1.166 a9.1.a2.2.0.cellPVmodule.6457 \n", "3 0.260 0.0 1.222 1.192 a9.1.a2.3.0.cellPVmodule.6457 \n", "4 0.089 0.0 1.248 1.219 a9.1.a2.4.0.cellPVmodule.6457 \n", "5 -0.082 0.0 1.274 1.245 a9.1.a2.5.0.cellPVmodule.6457 \n", "6 -0.252 0.0 1.302 1.272 a9.1.a2.6.0.cellPVmodule.6457 \n", "7 -0.423 0.0 1.328 1.299 a9.1.a2.7.0.cellPVmodule.6457 \n", "8 -0.594 0.0 1.355 1.325 a9.1.a2.8.0.cellPVmodule.6457 \n", "9 -0.765 0.0 1.381 1.352 a9.1.a2.9.0.cellPVmodule.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a9.1.a2.0.0.cellPVmodule.2310 944.889 125.396 0.133 0.769 \n", "1 a9.1.a2.1.0.cellPVmodule.2310 944.934 119.225 0.126 0.598 \n", "2 a9.1.a2.2.0.cellPVmodule.2310 944.980 114.055 0.121 0.427 \n", "3 a9.1.a2.3.0.cellPVmodule.2310 945.024 109.955 0.116 0.256 \n", "4 a9.1.a2.4.0.cellPVmodule.2310 945.070 108.491 0.115 0.085 \n", "5 a9.1.a2.5.0.cellPVmodule.2310 945.510 107.211 0.113 -0.086 \n", "6 a9.1.a2.6.0.cellPVmodule.2310 945.526 110.106 0.116 -0.257 \n", "7 a9.1.a2.7.0.cellPVmodule.2310 945.542 110.943 0.117 -0.428 \n", "8 a9.1.a2.8.0.cellPVmodule.2310 945.557 113.852 0.120 -0.599 \n", "9 a9.1.a2.9.0.cellPVmodule.2310 945.573 119.270 0.126 -0.769 \n", "\n", " rearY \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "5 0.0 \n", "6 0.0 \n", "7 0.0 \n", "8 0.0 \n", "9 0.0 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Improvement in Rear Irradiance" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(9.5)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round((df_w['Wm2Back'].mean()-df_0['Wm2Back'].mean())*100/df_0['Wm2Back'].mean(),1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# RESULT ANALYSIS DAY" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "df_0 = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_noPavers_1_Row2_Module10.csv'))\n", "df_w = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_WITHPavers_1_Row2_Module10.csv'))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
00.4110.00.5750.560a9.1.a2.0.0.cellPVmodule.6457a9.1.a2.0.0.cellPVmodule.2310579.37527.0610.0470.3850.0
10.3250.00.7250.710a9.1.a2.1.0.cellPVmodule.6457a9.1.a2.1.0.cellPVmodule.2310583.68027.8210.0480.2990.0
20.2380.00.8750.859a9.1.a2.2.0.cellPVmodule.6457a9.1.a2.2.0.cellPVmodule.2310590.75626.4540.0450.2120.0
30.1510.01.0241.010a9.1.a2.3.0.cellPVmodule.6457a9.1.a2.3.0.cellPVmodule.2310595.17726.7140.0450.1260.0
40.0650.01.1741.159a9.1.a2.4.0.cellPVmodule.6457a9.1.a2.4.0.cellPVmodule.2310601.54926.5340.0440.0390.0
5-0.0210.01.3241.309a9.1.a2.5.0.cellPVmodule.6457a9.1.a2.5.0.cellPVmodule.2310605.29026.8580.044-0.0470.0
6-0.1080.01.4741.459a9.1.a2.6.0.cellPVmodule.6457a9.1.a2.6.0.cellPVmodule.2310611.54326.7620.044-0.1340.0
7-0.1950.01.6241.609a9.1.a2.7.0.cellPVmodule.6457a9.1.a2.7.0.cellPVmodule.2310614.75027.4010.045-0.2210.0
8-0.2810.01.7731.758a9.1.a2.8.0.cellPVmodule.6457a9.1.a2.8.0.cellPVmodule.2310619.74128.3060.046-0.3070.0
9-0.3670.01.9231.908a9.1.a2.9.0.cellPVmodule.6457a9.1.a2.9.0.cellPVmodule.2310622.46929.3690.047-0.3930.0
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 0.411 0.0 0.575 0.560 a9.1.a2.0.0.cellPVmodule.6457 \n", "1 0.325 0.0 0.725 0.710 a9.1.a2.1.0.cellPVmodule.6457 \n", "2 0.238 0.0 0.875 0.859 a9.1.a2.2.0.cellPVmodule.6457 \n", "3 0.151 0.0 1.024 1.010 a9.1.a2.3.0.cellPVmodule.6457 \n", "4 0.065 0.0 1.174 1.159 a9.1.a2.4.0.cellPVmodule.6457 \n", "5 -0.021 0.0 1.324 1.309 a9.1.a2.5.0.cellPVmodule.6457 \n", "6 -0.108 0.0 1.474 1.459 a9.1.a2.6.0.cellPVmodule.6457 \n", "7 -0.195 0.0 1.624 1.609 a9.1.a2.7.0.cellPVmodule.6457 \n", "8 -0.281 0.0 1.773 1.758 a9.1.a2.8.0.cellPVmodule.6457 \n", "9 -0.367 0.0 1.923 1.908 a9.1.a2.9.0.cellPVmodule.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a9.1.a2.0.0.cellPVmodule.2310 579.375 27.061 0.047 0.385 \n", "1 a9.1.a2.1.0.cellPVmodule.2310 583.680 27.821 0.048 0.299 \n", "2 a9.1.a2.2.0.cellPVmodule.2310 590.756 26.454 0.045 0.212 \n", "3 a9.1.a2.3.0.cellPVmodule.2310 595.177 26.714 0.045 0.126 \n", "4 a9.1.a2.4.0.cellPVmodule.2310 601.549 26.534 0.044 0.039 \n", "5 a9.1.a2.5.0.cellPVmodule.2310 605.290 26.858 0.044 -0.047 \n", "6 a9.1.a2.6.0.cellPVmodule.2310 611.543 26.762 0.044 -0.134 \n", "7 a9.1.a2.7.0.cellPVmodule.2310 614.750 27.401 0.045 -0.221 \n", "8 a9.1.a2.8.0.cellPVmodule.2310 619.741 28.306 0.046 -0.307 \n", "9 a9.1.a2.9.0.cellPVmodule.2310 622.469 29.369 0.047 -0.393 \n", "\n", " rearY \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "5 0.0 \n", "6 0.0 \n", "7 0.0 \n", "8 0.0 \n", "9 0.0 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_w" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
00.4110.00.5750.560a9.1.a2.0.0.cellPVmodule.6457a9.1.a2.0.0.cellPVmodule.2310581.28120.6660.0360.3850.0
10.3250.00.7250.710a9.1.a2.1.0.cellPVmodule.6457a9.1.a2.1.0.cellPVmodule.2310585.06821.2100.0360.2990.0
20.2380.00.8750.859a9.1.a2.2.0.cellPVmodule.6457a9.1.a2.2.0.cellPVmodule.2310591.55821.0060.0360.2120.0
30.1510.01.0241.010a9.1.a2.3.0.cellPVmodule.6457a9.1.a2.3.0.cellPVmodule.2310594.92021.7610.0370.1260.0
40.0650.01.1741.159a9.1.a2.4.0.cellPVmodule.6457a9.1.a2.4.0.cellPVmodule.2310602.97122.8160.0380.0390.0
5-0.0210.01.3241.309a9.1.a2.5.0.cellPVmodule.6457a9.1.a2.5.0.cellPVmodule.2310607.09523.6590.039-0.0470.0
6-0.1080.01.4741.459a9.1.a2.6.0.cellPVmodule.6457a9.1.a2.6.0.cellPVmodule.2310612.25924.5040.040-0.1340.0
7-0.1950.01.6241.609a9.1.a2.7.0.cellPVmodule.6457a9.1.a2.7.0.cellPVmodule.2310615.35025.1320.041-0.2210.0
8-0.2810.01.7731.758a9.1.a2.8.0.cellPVmodule.6457a9.1.a2.8.0.cellPVmodule.2310620.85326.0770.042-0.3070.0
9-0.3670.01.9231.908a9.1.a2.9.0.cellPVmodule.6457a9.1.a2.9.0.cellPVmodule.2310623.74426.8560.043-0.3930.0
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 0.411 0.0 0.575 0.560 a9.1.a2.0.0.cellPVmodule.6457 \n", "1 0.325 0.0 0.725 0.710 a9.1.a2.1.0.cellPVmodule.6457 \n", "2 0.238 0.0 0.875 0.859 a9.1.a2.2.0.cellPVmodule.6457 \n", "3 0.151 0.0 1.024 1.010 a9.1.a2.3.0.cellPVmodule.6457 \n", "4 0.065 0.0 1.174 1.159 a9.1.a2.4.0.cellPVmodule.6457 \n", "5 -0.021 0.0 1.324 1.309 a9.1.a2.5.0.cellPVmodule.6457 \n", "6 -0.108 0.0 1.474 1.459 a9.1.a2.6.0.cellPVmodule.6457 \n", "7 -0.195 0.0 1.624 1.609 a9.1.a2.7.0.cellPVmodule.6457 \n", "8 -0.281 0.0 1.773 1.758 a9.1.a2.8.0.cellPVmodule.6457 \n", "9 -0.367 0.0 1.923 1.908 a9.1.a2.9.0.cellPVmodule.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a9.1.a2.0.0.cellPVmodule.2310 581.281 20.666 0.036 0.385 \n", "1 a9.1.a2.1.0.cellPVmodule.2310 585.068 21.210 0.036 0.299 \n", "2 a9.1.a2.2.0.cellPVmodule.2310 591.558 21.006 0.036 0.212 \n", "3 a9.1.a2.3.0.cellPVmodule.2310 594.920 21.761 0.037 0.126 \n", "4 a9.1.a2.4.0.cellPVmodule.2310 602.971 22.816 0.038 0.039 \n", "5 a9.1.a2.5.0.cellPVmodule.2310 607.095 23.659 0.039 -0.047 \n", "6 a9.1.a2.6.0.cellPVmodule.2310 612.259 24.504 0.040 -0.134 \n", "7 a9.1.a2.7.0.cellPVmodule.2310 615.350 25.132 0.041 -0.221 \n", "8 a9.1.a2.8.0.cellPVmodule.2310 620.853 26.077 0.042 -0.307 \n", "9 a9.1.a2.9.0.cellPVmodule.2310 623.744 26.856 0.043 -0.393 \n", "\n", " rearY \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "5 0.0 \n", "6 0.0 \n", "7 0.0 \n", "8 0.0 \n", "9 0.0 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_0" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(16.9)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round((df_w['Wm2Back'].mean()-df_0['Wm2Back'].mean())*100/df_0['Wm2Back'].mean(),1)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16.8" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round((df_w['Wm2Back'].mean()-df_0['Wm2Back'].mean())*100/df_0['Wm2Back'].mean(),1)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "16.9\n", "38.4\n", "36.4\n", "24.2\n", "9.8\n", "10.6\n", "9.3\n", "9.4\n", "18.5\n", "32.4\n", "36.8\n", "40.5\n" ] } ], "source": [ "average_back_d0=[]\n", "average_back_dw=[]\n", "average_front = []\n", "hourly_rearirradiance_comparison = []\n", "\n", "timessimulated = endtimeindex-starttimeindex\n", "\n", "for i in range (1, timessimulated+1):\n", " df_0 = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_noPavers_'+str(i)+'_Row2_Module10.csv'))\n", " df_w = load.read1Result(os.path.join(testfolder, 'results', 'irr_tutorial_14_WITHPavers_'+str(i)+'_Row2_Module10.csv'))\n", " print(round((df_w['Wm2Back'].mean()-df_0['Wm2Back'].mean())*100/df_0['Wm2Back'].mean(),1))\n", " hourly_rearirradiance_comparison.append(round((df_w['Wm2Back'].mean()-df_0['Wm2Back'].mean())*100/df_0['Wm2Back'].mean(),1))\n", " average_back_d0.append(df_0['Wm2Back'].mean())\n", " average_back_dw.append(df_w['Wm2Back'].mean())\n", " average_front.append(df_0['Wm2Front'].mean())" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Increase in rear irradiance: 20.6\n" ] } ], "source": [ "print(\"Increase in rear irradiance: \", round((sum(average_back_dw)-sum(average_back_d0))*100/sum(average_back_d0),1))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BG no Pavers: 8.3\n", "BG with Pavers: 10.0\n" ] } ], "source": [ "print(\"BG no Pavers: \", round(sum(average_back_d0)*100/sum(average_front),1))\n", "print(\"BG with Pavers: \", round(sum(average_back_dw)*100/sum(average_front),1))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "#metdata.datetime[starttime].hour # 7\n", "#metdata.datetime[endtimeindex].hour # 17\n", "xax= [7, 8, 9, 10, 11, 12,13,14,15,16,17,18] # Lazy way to get the x axis...\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Hour')" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAGwCAYAAAC99fF4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZm5JREFUeJzt3Qd4lFW6B/A/6b2HFEgIEEIg9N6roCIooldcELBjx3JdkbvqquuioqgryqILIoqKDRBcuvRu6C10kkAKSUjvmdznPZOJRANm0r5vZv6/5/k2k0mYnB0h8845b2lSXl5eDiIiIiKqwq7qp0REREQkGCQRERERVYNBEhEREVE1GCQRERERVYNBEhEREVE1GCQRERERVYNBEhEREVE1HKq7k2rGYDDg0qVL8PT0RJMmTbReDhEREdWAtIjMyclBaGgo7OyuvV/EIKkOJEAKCwvTehlERERUCwkJCWjevPk1v84gqQ5kB8n0JHt5eWm9HCIiIqqB7Oxstclheh2/FgZJdWA6YpMAiUESERGRZfmzVBkmbhMRERFVg0ESERERUTUYJBERERFVg0ESERERUTUYJBERERFVg0ESERERUTUYJBERERFVg0ESERERUTUYJBERERFVg0ESERERUTUYJBERERFVg0ESERERUTUYJBEREZHuXMkrxq/nMzRdA4MkIiIi0pW03CL85dNduGf+buw+m67ZOhgkERERkW6kZhfi7k924URyDrxcHOHv4azZWhw0+8lEREREV7mUWYAJn+7C+fR8hHq74KuH+iAiwF2z9djETtKbb76JJk2a4Omnn668r7CwEI8//jj8/f3h4eGBO+64AykpKZquk4iIyFYlZORj/Cc7VYDU3NcVS6b21TRAsokgae/evZg3bx46depU5f5nnnkGK1aswHfffYfNmzfj0qVLGDdunGbrJCIislXn0/Iwft5OJGQUIMLfDd9O7YswPzetl2XdQVJubi4mTpyITz/9FL6+vpX3Z2VlYf78+Zg9ezaGDRuG7t2747PPPsOOHTuwa9euaz5eUVERsrOzq1xERERUe6dTc9UO0qWsQrQOdFc7SKE+rtADqw6S5DjtlltuwQ033FDl/tjYWJSUlFS5Pzo6GuHh4di5c+c1H2/mzJnw9vauvMLCwhp0/URERNYsLjkHd3+yEynZRWgb5IlvHu6LIC8X6IXV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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(xax,hourly_rearirradiance_comparison)\n", "plt.ylabel('$\\Delta$ in G$_{rear}$ [%] \\n(G$_{rear-with}$ - G$_{rear-without}$ / G$_{rear-without}$)')\n", "plt.xlabel('Hour')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" } }, "nbformat": 4, "nbformat_minor": 4 }